package com.ypj.indusynergyems.controller;

import com.ypj.indusynergyems.annotation.LogOperator;
import com.ypj.indusynergyems.common.convention.result.Result;
import com.ypj.indusynergyems.common.convention.result.Results;
import com.ypj.indusynergyems.dao.entity.CompanyEntity;
import com.ypj.indusynergyems.dao.entity.DeptEntity;
import com.ypj.indusynergyems.dao.entity.PostEntity;
import com.ypj.indusynergyems.dao.entity.UserEntity;
import com.ypj.indusynergyems.service.ICompanyService;
import jakarta.servlet.http.HttpSession;
import jakarta.websocket.Session;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@Controller
@RequiredArgsConstructor
@Slf4j
public class CompanyController {

    private final ICompanyService companyService;

    @GetMapping("/system/company/register")
    public String toCompanyRegister(){
        return "/system/company/register";
    }

    @PostMapping("system/company/register")
    public @ResponseBody Result<Void> register(CompanyEntity company){
        companyService.register(company);
        return Results.success();
    }

    /**
     * 查看本人注册公司列表（phone）
     */
    @GetMapping("/system/company/list")
    public String CompanyList(Model model, HttpSession session){
        List<CompanyEntity> companyList = companyService.findAllCompany((String) session.getAttribute("phone"));
        model.addAttribute("companyList",companyList);
        return "system/company/list";
    }

    /**
     * 查看该公司部门
     */
    @GetMapping("/system/company/dept/{id}")
    public String findAllDept(Model model,@PathVariable("id") int companyId,HttpSession session){
        List<DeptEntity> Lists = companyService.findAllDept(companyId);
        List<DeptEntity> deptList = new ArrayList<>();
        List<DeptEntity> postList = new ArrayList<>();
        //处理获取postList与deptList
        for (DeptEntity list:Lists){
            if (list.getPostId() == null){
                deptList.add(list);
            }else {
                postList.add(list);
            }
        }
        model.addAttribute("postList",postList);
        model.addAttribute("deptList",deptList);
        session.setAttribute("postList",postList);
        session.setAttribute("deptList",deptList);
        return "/system/company/dept";
    }


    @GetMapping("/system/company/deptAdd")
    public String toDeptAdd(){
        return "/system/company/deptAdd";
    }
    /**
     * 添加公司部门
     */
    @PostMapping("/system/company/dept/add")
    public @ResponseBody String returnDeptAdd(DeptEntity dept){
        return companyService.addDept(dept)>0?"success":"fail";
    }

    /**
     * 查看该公司的员工
     */
    @GetMapping("/system/company/staff/{companyNum}")
    public String findAllStaff(Model model,@PathVariable("companyNum") int companyNum){
        List<UserEntity> staffList = companyService.findAllStaff(companyNum);
        model.addAttribute("staffList",staffList);
        return "system/company/staff";
    }

    /**
     *查询 编辑数据返回给前端
     */
    @GetMapping("/system/company/dept/edit/{id}")
    public String showEditMenu(@PathVariable("id")int deptId,Model model){
        log.info("=======显示编辑菜单页面，方法入参，deptId={}=====",deptId);
        //3.根据菜单id查询菜单详情
        DeptEntity dept =  companyService.findMenuDetail(deptId);
        model.addAttribute("dept",dept);
        return "/system/company/deptEdit";
    }

    //修改职位
    @PutMapping("system/company/dept/edit")  //url
    @LogOperator(action = "编辑一个职位")  //自定义注解，提供了一个操作描述，用于在日志中记录调用的具体操作
    public @ResponseBody String editMenu(DeptEntity dept){
        log.info("=======编辑菜单，方法入参，dept={}=====",dept);
        return companyService.editMenu(dept)>0?"success":"fail";
    }

    //删除职位
    @DeleteMapping("system/company/dept/delete")   //普通url的写法
    @LogOperator(action = "删除一个菜单")  //自定义注解，提供了一个操作描述，用于在日志中记录调用的具体操作
    public @ResponseBody String deleteMenu(@RequestParam("id") int deptId){
        log.info("=======删除菜单，方法入参，menuId={}=====",deptId);
        return companyService.deleteMenu(deptId);
    }


    /**
     *查询 编辑数据返回给前端
     */
    @GetMapping("/system/company/edit/{id}")
    public String showCompanyEditMenu(@PathVariable("id")int companyId,Model model){
        log.info("=======显示编辑菜单页面，方法入参，companyId={}=====",companyId);
        //3.根据菜单id查询菜单详情
        CompanyEntity company =  companyService.findCompanyDetail(companyId);
        model.addAttribute("company",company);
        return "/system/company/edit";
    }

    //修改职位
    @PutMapping("system/company/edit")  //url
    @LogOperator(action = "编辑一个职位")  //自定义注解，提供了一个操作描述，用于在日志中记录调用的具体操作
    public @ResponseBody String editCompany(CompanyEntity company){
        log.info("=======编辑菜单，方法入参，company={}=====",company);
        return companyService.editCompany(company)>0?"success":"fail";
    }

    //删除职位
    @DeleteMapping("/system/company/delete")   //普通url的写法
    @LogOperator(action = "删除一个菜单")  //自定义注解，提供了一个操作描述，用于在日志中记录调用的具体操作
    public @ResponseBody String deleteCompany(@RequestParam("id") int companyId){
        log.info("=======删除菜单，方法入参，companyId={}=====",companyId);
        return companyService.deleteCompany(companyId);
    }

    /**
     * 查看公司旗下店铺
     */
}
